package OOP.InnerClass;

public class Anonymous_Inner_class {
    public static void main(String[] args) {
        Outclass outclass = new Outclass();
        outclass.fun1();
    }

}

class Outclass{
    public void fun1(){
        //普通方法是在外面写一个类实现接口在方法体内创建实例并调用
        //如果这个类只使用一次传统方法会浪费
        //这里使用匿名内部类
        //tiger 编译类型为 Animal
        //tiger 运行类型为 匿名内部类
        //底层是实现接口并实例化直接传给tiger引用
        Animal tiger = new Animal() {
            @Override
            public void method() {
                System.out.println("tiger~~~");
            }
        };

        //注意和Father father = new Father("小刚")；区别在于有无大括号
        //father 编译类型为 Father
        //father 运行类型为 匿名内部类
        Father father = new Father("小刚"){
                public void fun1() {
                    System.out.println("内部匿名类重写~~~");
                }
        };

        //作用域内（方法体内）调用
        tiger.method();
       // father.fun1();
    }
}

//接口
interface Animal {
    void method();
}


//普通类
class Father {
    private String name;
    public Father(String name) {
        this.name = name;
    }

    public void fun1(){
        System.out.println("Father~~~");
    }
}